setwd("/run/media/linhnguyen/DATA/Google Drive/R development/Inventory charts")
# Read the data and ensure the data is in dataframe format
library(readr)
inventory <- read_csv("inventory_data.csv")
inventory <- as.data.frame(inventory)
# Call other libraries to plot
library(ggplot2)
library(plotly)
library(dplyr)
library(reshape2)
SKU 112991
source("func_InventoryStackedArea.R")
p1 <- InventoryStackedArea(inventory, 112991)
p1
SKU 1063491
source("func_InventoryStackedArea.R")
p2 <- InventoryStackedArea(inventory, 1063491)
p2
SKU 112991
source("func_InventoryDaysToExpiry.R")
p3 <- InventoryDaysToExpiry(inventory, 112991)
p3
SKU 1063491
source("func_InventoryDaysToExpiry.R")
p4 <- InventoryDaysToExpiry(inventory, 1063491)
p4
Second graph with ggplot2
# Make sure on date format
inventory$Date <- as.Date(inventory$Date,format = "%Y-%m-%d")
inventory$Expiration.Date <- as.Date(inventory$Expiration.Date,format = "%Y-%m-%d")
inventory$Expiration.Text <- as.character(inventory$Expiration.Date)
# Calculate days to expiry
inventory$Days.To.Expiry <- inventory$Expiration.Date - inventory$Date
inventory$Days.To.Expiry <- as.numeric(inventory$Days.To.Expiry)
# Extract the SKU
test <- subset(inventory, SKU==112991)
test <- test[order(test$Expiration.Date, test$Date, decreasing = F),]
# Make the plot
ggplot(data=inventory, aes(x=Days.To.Expiry,y=Quantity,group=factor(Expiration.Text))) +
geom_line() + scale_x_reverse() +
geom_hline(aes(yintercept = 0)) +
geom_vline(aes(xintercept = 0)) +
facet_wrap(~SKU) +
ggtitle("Inventory by days to expiry") +
xlab("Days to expiry")
Second graph with plotly
sku.list <- unique(inventory$SKU)
## First SKU
test <- subset(inventory, SKU==sku.list[1])
test <- test[order(test$Expiration.Date, test$Date, decreasing = F),]
data.unique <- unique(test$Expiration.Date)
# Draw the first batch
inv.batch1 <- test[test$Expiration.Date == data.unique[1],]
colnames(inv.batch1)[colnames(inv.batch1) == "Quantity"] <- "value"
test.cast1 <- dcast(data = inv.batch1, formula = Days.To.Expiry ~ Expiration.Date)
test.cast1 <- test.cast1[order(test.cast1$Days.To.Expiry, decreasing = TRUE),]
# colnames(test)[colnames(test) == "Quantity"] <- "value"
# test.cast <- dcast(data = test, formula = Date ~ Expiration.Date)
# test.cast <- merge(x = test.cast, y = test, by = "Date", all.x = TRUE)
# test.cast <- subset(test.cast, select = -c(SKU, value, Expiration.Date, Expiration.Text))
# test.cast <- test.cast[,c(ncol(test.cast), 2:(ncol(test.cast) - 1))]
p <- plot_ly(test.cast1, x = test.cast1[[1]], y = test.cast1[[2]], name = as.character(data.unique[1]), type = 'scatter', mode = 'lines') %>%
layout(xaxis = list(autorange = "reversed", title = "Days to expiry"))
# add_trace(y = test.cast[[8]], name = 'trace 1', mode = 'lines') %>%
# add_trace(y = test.cast[[9]], name = 'trace 2', mode = 'lines') %>%
# Add the remaining batches
for (i in 2:length(data.unique)){
inv.batch <- test[test$Expiration.Date == data.unique[i],]
colnames(inv.batch)[colnames(inv.batch) == "Quantity"] <- "value"
test.cast <- dcast(data = inv.batch, formula = Days.To.Expiry ~ Expiration.Date)
test.cast <- test.cast[order(test.cast$Days.To.Expiry, decreasing = TRUE),]
p <- add_trace(p, x = test.cast[[1]], y = test.cast[[2]], name = as.character(data.unique[i]), mode = 'lines')
}
plot.list <- list()
plot.list[[1]] <- p
## Next SKUs
for (i in 2:length(sku.list)){
test <- subset(inventory, SKU==sku.list[i])
test <- test[order(test$Expiration.Date, test$Date, decreasing = F),]
data.unique <- unique(test$Expiration.Date)
# Draw the first batch
inv.batch1 <- test[test$Expiration.Date == data.unique[1],]
colnames(inv.batch1)[colnames(inv.batch1) == "Quantity"] <- "value"
test.cast1 <- dcast(data = inv.batch1, formula = Days.To.Expiry ~ Expiration.Date)
test.cast1 <- test.cast1[order(test.cast1$Days.To.Expiry, decreasing = TRUE),]
# colnames(test)[colnames(test) == "Quantity"] <- "value"
# test.cast <- dcast(data = test, formula = Date ~ Expiration.Date)
# test.cast <- merge(x = test.cast, y = test, by = "Date", all.x = TRUE)
# test.cast <- subset(test.cast, select = -c(SKU, value, Expiration.Date, Expiration.Text))
# test.cast <- test.cast[,c(ncol(test.cast), 2:(ncol(test.cast) - 1))]
p1 <- plot_ly(test.cast1, x = test.cast1[[1]], y = test.cast1[[2]], name = as.character(data.unique[1]), type = 'scatter', mode = 'lines') %>%
layout(xaxis = list(autorange = "reversed", title = "Days to expiry"))
# add_trace(y = test.cast[[8]], name = 'trace 1', mode = 'lines') %>%
# add_trace(y = test.cast[[9]], name = 'trace 2', mode = 'lines') %>%
# Add the remaining batches
for (j in 2:length(data.unique)){
inv.batch <- test[test$Expiration.Date == data.unique[j],]
colnames(inv.batch)[colnames(inv.batch) == "Quantity"] <- "value"
test.cast <- dcast(data = inv.batch, formula = Days.To.Expiry ~ Expiration.Date)
test.cast <- test.cast[order(test.cast$Days.To.Expiry, decreasing = TRUE),]
p1 <- add_trace(p1, x = test.cast[[1]], y = test.cast[[2]], name = as.character(data.unique[i]), mode = 'lines')
}
plot.list[[i]] <- p1
}
subplot(plot.list, nrows = 15, shareX = TRUE, shareY = TRUE) %>% layout(dragmode = "select")